package com.zhuzicc;

import redis.clients.jedis.Jedis;

import java.util.concurrent.TimeUnit;

public class TestJedis {

    // 创建Jedis对象
    public static final Jedis jedis = new Jedis("127.0.0.1", 6379);

    public void testJedis() {
        // 1.拿到jedis对象,jedis中所有的命令就是redis里对应命令
        System.out.println(jedis.ping());
    }

    public void testJedisKey() {
        System.out.println("选择需要操作的库： " + jedis.select(0));
        System.out.println("清空数据：" + jedis.flushDB());
        System.out.println("判断某个键是否存在：" + jedis.exists("name"));
        System.out.println("新增<'name','zhuzicc'>的键值对：" + jedis.set("name", "zhuzicc"));
        System.out.println("新增<'age','24'>的键值对：" + jedis.set("age", "24"));
        System.out.println("新增<'height ','183'>的键值对：" + jedis.set("height ", "183"));
        System.out.print("当前系统中所有的键如下所示：");
        System.out.println(jedis.keys("*"));

        System.out.println("删除键age：" + jedis.del("age"));
        System.out.println("判断键age是否存在：" + jedis.exists("age"));
        System.out.println("查看键username存储的值的类型：" + jedis.type("name"));
        System.out.println("查看键height存储的值的类型：" + jedis.type("height"));
        System.out.println("随机返回key空间的一个对象：" + jedis.randomKey());
        System.out.println("重命名指定key值：" + jedis.rename("name", "newName"));
        System.out.println("取出改名后的key值：" + jedis.get("newName"));
        System.out.println("清空当前数据库中所有的 " + jedis.flushDB());
        System.out.println("返回当前数据库中key的数目:" + jedis.dbSize());
        System.out.println("删除所有库中的所有 " + jedis.flushAll());
    }

    public void testJedisString() {
        jedis.flushDB();
        System.out.println("===========增加数据===========");
        System.out.println(jedis.set("key1", "value1"));
        System.out.println(jedis.set("key2", "value2"));
        System.out.println(jedis.set("key3", "value3"));
        System.out.println("删除键key2 : " + jedis.del("key2"));
        System.out.println("获取键key2 : " + jedis.get("key2"));
        System.out.println("修改key1:" + jedis.set("key1", "value1Changed"));
        System.out.println("获取key1的值:" + jedis.get("key1"));
        System.out.println("在key3后面加入值:" + jedis.append("key3", "End"));
        System.out.println("key3的值:" + jedis.get("key3"));
        System.out.println("增加多个键值对:" + jedis.mset("key01", "value01", "key02", "value02"));
        System.out.println("获取多个键值对:" + jedis.mget("key01", "key02", "key03"));
        System.out.println("获取多个键值对:" + jedis.mget("key01", "key02", "key03", "key04"));
        System.out.println("删除多个键值对:" + jedis.del("key01", "key02"));
        System.out.println("获取多个键值对: " + jedis.mget("key1", "key02", "key03"));
        jedis.flushDB();
        System.out.println("===========新增键值对防止覆盖原先值==========");
        System.out.println(jedis.setnx("key1", "value1"));
        System.out.println(jedis.setnx("key2", "value2"));
        System.out.println(jedis.setnx("key2", "value2-new"));
        System.out.println(jedis.get("key1"));
        System.out.println(jedis.get("key2"));
        System.out.println("===========新增键值对并设置有效时间===========");
        System.out.println(jedis.setex("key3", 2, "value3"));
        System.out.println(jedis.get("key3"));
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("key3"));
        System.out.println("=========获取原值 ,更新为新值==========");
        System.out.println(jedis.getSet("key2", "key2GetSet"));
        System.out.println(jedis.get("key2"));
        System.out.println("获得key2的值的字串: " + jedis.getrange("key2", 2, 4));
    }

    public void testJedisList() {
        jedis.flushDB();
        System.out.println("==========添加一个list============");
        jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");
        jedis.lpush("collections", "HashSet");
        jedis.lpush("collections", "TreeSet");
        jedis.lpush("collections", "TreeMap");
        System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));//-1代表倒
        System.out.println("collections区间0-3的元素:" + jedis.lrange("collections", 0, 3));
        System.out.println("=====================================");
        //删除列表指定的值 ,第二个参数为删除的个数（有重复时) ,后add进去的值先被删 ,类似于出栈
        System.out.println("删除指定元素个数:" + jedis.lrem("collections", 2, "HashMap"));
        System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
        System.out.println("删除下表0-3区间之外的元素:" + jedis.ltrim("collections", 0, 3));
        System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
        System.out.println("collections列表出栈（左端): " + jedis.lpop("collections"));
        System.out.println("collections的内容:" + jedis.lrange("collections", 0, -1));
        System.out.println("collections添加元素 ,从列表右端 ,与lpush相对应:" + jedis.rpush("collections", "EnumMap"));
        System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
        System.out.println("collections列表出栈（右端）:" + jedis.rpop("collections"));
        System.out.println("collections的内容: " + jedis.lrange("collections", 8, -1));
        System.out.println("修改collections指定下标1的内容: " + jedis.lset("collections", 1, "LinkedArrayList"));
        System.out.println("collections的内容: " + jedis.lrange("collections", 8, -1));
        System.out.println("=====================================");
        System.out.println("collections的长度:" + jedis.llen("collections"));
        System.out.println("获取collections下标为2的元素:" + jedis.lindex("collections", 2));
        System.out.println("======================================");
        jedis.lpush("sortedList", "3", "6", "2", "0", "7", "4");
        System.out.println("sortedList排序前:" + jedis.lrange("sortedList", 0, -1));
        System.out.println(jedis.sort("sortedList"));
        System.out.println("sortedList排序后: " + jedis.lrange("sortedList", 0, -1));
    }

    public void testSet() {
        jedis.flushDB();
        System.out.println("==========向集合中添加元素(不重复) ==========");
        System.out.println(jedis.sadd("eleSet", "e1", "e2", "e4", "e3", "e0", "e8", "e7", "e5"));
        System.out.println(jedis.sadd("eleSet", "e6"));
        System.out.println(jedis.sadd("eleSet", "e6"));
        System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
        System.out.println("删除一个元素e0: " + jedis.srem("eleSet", "e0"));
        System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
        System.out.println("删除两个元素e7和e6: " + jedis.srem("eleSet", "e7", "e6"));
        System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
        System.out.println("随机的移除集合中的一个元素: " + jedis.spop("eleSet"));
        System.out.println("随机的移除集合中的一个元素: " + jedis.spop("eleSet"));
        System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
        System.out.println("eleSet中包含元素的个数: " + jedis.scard("eleSet"));
        System.out.println("e3是否在eleSet中: " + jedis.sismember("eleSet", "e3"));
        System.out.println("e1是否在eleSet中: " + jedis.sismember("eleSet", "e1"));
        System.out.println("e1是否在eleSet中: " + jedis.sismember("eleSet", "e5"));
        System.out.println("=============================");
        System.out.println(jedis.sadd("eleSet1", "e1", "e2", "e4", "e3", "e0", "e8", "e7", "e5"));
        System.out.println(jedis.sadd("eleSet2", "e1", "e2", "e4", "e3", "e0", "e8"));
        System.out.println("将eleSet1中删除e1并存入eleSet3中: " + jedis.smove("eleSet1", "eleSet3", "e1"));
        System.out.println("将eleSet1中删除e2并存入eleSet3中: " + jedis.smove("eleSet1", "eleSet3", "e2"));
        System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
        System.out.println("eleSet3中的元素: " + jedis.smembers("eleSet3"));
        System.out.println("===========集合运算===============");
        System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
        System.out.println("eleSet2中的元素: " + jedis.smembers("eleSet2"));
        System.out.println("eleSet1和eleSet2的交集: " + jedis.sinter("eleSet1", "eleSet2"));
        System.out.println("eleSet1和eleSet2的并集:" + jedis.sunion("eleSet1", "eleSet2"));
        System.out.println("eleSet1和eleSet2的并集:" + jedis.sunion("eleSet1", "eleSet2"));
        System.out.println("eleSet1和eleSet2的差集:" + jedis.sdiff("eleSet1", "eleSet2"));//eleSet1中有 ,eleSet2中没有
        jedis.sinterstore("eleSet4", "eleSet1", "eleSet2");//求交集并将交集保存到dstkey的集合
        System.out.println("eleSet4中的元素: " + jedis.smembers("eleSet4"));

    }

    public static void main(String[] args) {
        TestJedis test = new TestJedis();
        test.testSet();

    }
}
